package member.model.dao;

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;

import member.to.MemberTO;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class MemberDAO {
	
	private static MemberDAO instance = new MemberDAO();
	private SqlMapClient sqlMap;
	
	private MemberDAO(){
		try {
			Reader reader = 
					Resources.getResourceAsReader("member/config/SqlMapConfig.xml");
			sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	public static MemberDAO getInstance(){
		return instance;
	}
	
	public MemberTO selectMemberById(String id) throws SQLException{
		return (MemberTO)sqlMap.queryForObject("selectMemberById", id);
	}
	/**
	 * 주민번호로 회원 정보 조회하는 메소드 - 가입시 호출
	 * @param registerNumber1 주민번호 앞 6자리
	 * @param registerNumber2 주민번호 뒤 7자리
	 * @return
	 * @throws SQLException
	 */
	public MemberTO selectMemberByRegisterNumber
					(String registerNumber1, String registerNumber2) throws SQLException{
		HashMap map = new HashMap();
		map.put("registerNumber1", registerNumber1);
		map.put("registerNumber2", registerNumber2);
		return (MemberTO)sqlMap.queryForObject("selectMemberByRegisterNumber", map);
	}
	/**
	 * 주민번호로 회원 정보 조회하는 메소드 - 수정시 호출 
	 * 데이터 수정하는 사람이 수정하는 주민번호가 다른 사람의 것과 동일 한지 조회하기 위한 메소드
	 * @param registerNumber1 : 주민번호 앞6 자리
	 * @param registerNumber2 : 주민번호 뒤 7자리
	 * @param id : 비교대상에서 제외할 id (수정하는 회원의 id)
	 * @return
	 * @throws SQLException
	 */
	public MemberTO selectMemberByRegisterNumber 
	(String registerNumber1, String registerNumber2,  String id) 
																				throws SQLException{
		HashMap map = new HashMap();
		map.put("registerNumber1", registerNumber1);
		map.put("registerNumber2", registerNumber2);
		map.put("id", id);
		return (MemberTO)sqlMap.queryForObject("selectMemberByRegisterNumberAndId", map);
}
	/**
	 * 회원 정보를 DB에 insert하는 메소드
	 * @param mto 등록할 회원 정보
	 * @throws SQLException
	 */
	public void insertMember(MemberTO mto) throws SQLException{
		sqlMap.insert("insertMember", mto);
	}
	/**
	 * Member 테이블의 전체 회원정보 조회 처리
	 * @return
	 * @throws SQLException
	 */
	public ArrayList<MemberTO> selectAllMember() throws SQLException{
		return (ArrayList)sqlMap.queryForList("selectAllMember");
	}
	//마일리지 범위로 조회
	public ArrayList<MemberTO> selectMemberByMileageRange
	(int sMileage, int eMileage) throws SQLException{
		HashMap map = new HashMap();
		map.put("sMileage", sMileage);
		map.put("eMileage", eMileage);
		return (ArrayList)sqlMap.queryForList("selectMemberByMileageRange", map);
	}
	//회원 정보 수정 처리
	public void updateMember(MemberTO mto) throws SQLException{
		sqlMap.update("updateMember", mto);
	}
	public void deleteMemberById(String id) throws SQLException{
		sqlMap.delete("deleteMemberById", id);
	}
	public ArrayList<MemberTO> selectMemberByName(String name) throws SQLException{
		return (ArrayList)sqlMap.queryForList("selectMemberByName", name);
	}
	
}
















